#include"comm.hpp"
#include<unistd.h>

//服务端用来创建共享内存
//要求server来接收数据
int main(){
    //1:获取创建共享内存需要的Key值
    key_t key = getKey();
    printf("server key: 0x%x\n",key);
    //2：开始创建共享内存
    int shmid = creatshm(key);
    printf("server的标识数:%d\n",shmid);


    //3:让进程和共享内存关联起来
    //假设使用字符串来接收挂接结果
    //有点类似于malloc
    //返回值是挂接到虚拟进程空间的起始位置
    char* start = (char*)attachShm(shmid);
    printf("挂接成功，服务端挂接到的初始地址是:%p\n",start);
    sleep(5);

    //开始通信：服务端来接收客户端发的信息
    while (true)
    {
        printf("客户端说：%s\n",start);
        // struct shmid_ds ds;
        // shmctl(shmid,IPC_STAT,&ds);
        // printf("获取属性:size:%zu,pid:%d,myself:%d key:0x%x\n",ds.shm_segsz,ds.shm_cpid,getpid(),ds.shm_perm.__key);

        sleep(1);
    }
    





    //4:在回收共享内存空间之前，我们可以先去除进程和共享内存空间的关联性
    detachShm(start);

    sleep(5);
    //5:回收共享内存空间
    deleteShm(shmid);


    return 0;
}